#include "Recibidor.h"
#include "Fifo.h"
#include "Aviso.h" 
#include "Canales.h"
#include "Logger.h"
#include <string>

#define OKINI 'a'

using namespace std;

Recibidor::Recibidor(char* jugador) : Receptor(), Trasmisor() {
	this->jugador = string(jugador);
}


Recibidor::~Recibidor() {
}


int Recibidor::correr() {
	
	string remitente = "RECIBIDOR " + this->jugador;
	
	Logger::loggear("Inicia",remitente);
	abrirCanalEscritura();
	abrirCanalLectura();
	trasmitirOKInicial();
	
	while (true) {
		Logger::loggear("Voy a leer",remitente);
		leer();
		if (bytesLeidos == sizeof(Aviso) ) {
			break;
		}
		escribir(buffer, bytesLeidos);
	}
	cerrarCanalLectura();
	cerrarCanalEscritura();
	Logger::loggear("Finaliza",remitente);
	return 0;
}


void Recibidor::abrirCanalLectura() {
	string archivo = string(JUGADORRECIBIDOR) + this->jugador;
	Receptor::abrirCanalLectura((char*) archivo.c_str());
}


void Recibidor::abrirCanalEscritura() {
	string archivo = string(RECIBIDORJUGADOR) + this->jugador;
	Trasmisor::abrirCanalEscritura((char*) archivo.c_str());
}

void Recibidor::trasmitirOKInicial() {
	char ok = OKINI;
	escribir(&ok, sizeof(char));
}
